git pushコマンドを実行すると「fatal: <ブランチ名> cannot be resolved to branch」となりpushが失敗する
こんにちは、CX事業本部 IoT事業部の若槻です。
今回は、git push
コマンドを実行するとfatal: <ブランチ名> cannot be resolved to branch
となりpushが失敗する事象の原因と対処についてです。
事象
GitHubを使用した開発でローカルブランチでの作業内容をgit push
でリモートブランチに送信しようとしたところ、下記のようなエラーとなりpushが失敗しました。
$ git push origin feature/adminpage/impl-adding-user-in-bulk fatal: feature/adminpage/impl-adding-user-in-bulk cannot be resolved to branch
直接原因、解決
原因は、正しいブランチ名では大文字となっている箇所が、pushコマンドで指定したブランチ名では小文字となっていたためでした。
$ git branch --contains=HEAD feature/adminPage/impl-adding-user-in-bulk
よく見ると/adminpage
ではなく、正しくは/adminPage
です。
正しいブランチ名を指定すると正常にpushが行えました。
$ git push origin feature/adminPage/impl-adding-user-in-bulk
根本原因
そもそもなんで小文字と大文字を間違えたかと言うと、git status
やgit commit
コマンドで画面出力されるカレントブランチ名は大文字が小文字になっているためです。画面出力されたブランチ名の文字列をいつものようにコピペしてpushコマンドに指定していたため、今回の事象に遭遇してしまいました。
$ git status On branch feature/adminpage/impl-adding-user-in-bulk Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: web/src/components/actions/useGetUsers.tsx modified: web/src/components/pages/userPage.tsx ...
$ git commit -m "fix" [feature/adminpage/impl-adding-user-in-bulk cff74b1] fix 8 files changed, 429 insertions(+), 366 deletions(-) ...
git push origin HEAD を使った場合は?
git push origin HEAD
を使用するとカレントブランチがpushされます。これでブランチ名の指定ミスも起きないのではと考えました。
実行してみると、コンソール上では一見pushが成功したように見えます。
$ git branch --contains=HEAD feature/adminPage/impl-adding-user-in-bulk $ git push origin HEAD
しかしリモートには名前が小文字のブランチ(下記画像の下)が新しく作成されてしまいました。ブランチの内容はローカルで行った変更が反映されていますが、名前が正しいブランチ(下記画像の上)とは別ブランチとなっています。
よって、git push origin HEAD
では大文字を含むブランチを正常にpushすることは出来ませんでした。
結論
大文字を含むブランチ名を作らないようにする。そうすればpush時のブランチ名の指定ミスは起きないですし、git push origin HEAD
も使えます。
以上